package com.hqq.exercise.array;

/**
 * SnakeNumber 蛇形填数
 * 题目描述:
 * 在n*n的方阵里填入1,2..,n*n 要求填成蛇形
 * 例如n=4时方阵为:
 * 10 11 12 1
 * 9  16 13 2
 * 8  15 14 3
 * 7  6  5  4
 * 注:n<=8
 * Created by heqianqian on 2017/8/8.
 */
public class SnakeNumber {

    /**
     * 在n*n的矩阵里蛇形填数
     *
     * @param n 矩阵阶数
     */
    public static int[][] fillSnakeNumber(int n) {
        int[][] matrix = new int[n][n];//定义方阵 默认初始化每个元素为0
        int x, y;//表示方阵的横纵下标
        int count = matrix[x = 0][y = n - 1] = 1;//表示当前数值
        while (count < n * n) {
            //先从上往下
            while (x + 1 <  n && matrix[x + 1][y] == 0) {
                matrix[++x][y] = ++count;
            }
            //再从右往左
            while (y - 1 >= 0 && matrix[x][y - 1] == 0) {
                matrix[x][--y] = ++count;
            }
            //从下往上
            while (x - 1 >= 0  && matrix[x - 1][y] == 0) {
                matrix[--x][y] = ++count;
            }
            //从左往右
            while (y + 1 < n && matrix[x][y + 1] == 0) {
                matrix[x][++y] = ++count;
            }
        }
        return matrix;
    }

}
